package com.tedu.api.io;

import org.junit.Test;

import java.io.File;
import java.io.IOException;

/**包位置：java.io
 * File 表示文件或者文件夹【存在硬盘】
 * 测试：io包下创建文件demo.txt
 * 验证项目下是否存在demo.txt文件
 * 构造器：传入路径
 * 创建File文件夹
 * File file=new File("传入路径")
 * 构造器：传入路径/  \表示路径
 *               / 表示路径、文件的下载【下载到本地】--本地测试
 *              \  表示路径、文件上传【服务器】--网络  √
 *File文件/文件夹可以做什么：【常用方法】
 *1.查看文件或者文件夹的属性信息（名字、大小、判断文件是否存在等）
 * 2.操作文件或者文件夹(创建、删除等)
 *3.访问一个目录的子项(访问文件夹下的文件夹操作)
 *
 */
public class FileAPI {
    @Test
    public void testFile() {
        //项目结构：C/S架构---Maven---查路径--通过Idea查路径
        //找到需要查找文件夹/文件---右键--打开于--Explorer
        //src\main\java\com\tedu\api\io   char c='\\'  转义成路径：\
        //编写java代码--任何操作平台运行--路径--封装：静态属性
        //java编写 \\ 情况-----File.separator  静态属性可以在任何平台上转义成对应路径
        File file = new File("src" + File.separator + "main" + File.separator + "java" + File.separator + "com" + File.separator + "tedu" + File.separator + "api" + File.separator + "io" + File.separator + "demo.txt");
        //验证：demo.txt文件是否存在
        boolean b = file.exists();
        System.out.println("测试demo.txt文件是否存在:" + b);
    }

    /**
     * getName() 获取文件/文件夹的名字【注意：不管file是否存在，只会拿名】
     * length()  返回值：long
     * 返回当前文件的大小（字节量）---汉字：3个字节量
     * exists()  返回值：boolean
     * 判断file文件是否存在，存在true，不存在false
     */
    @Test
    public void testGLE() {
        File file = new File("src" + File.separator + "main" + File.separator + "java" + File.separator + "com" + File.separator + "tedu" + File.separator + "api" + File.separator + "io" + File.separator + "demo.txt");
        String str = file.getName();
        System.out.println("file文件名字是：" + str);
        long length = file.length();
        System.out.println("file文件字节量是：" + length);
    }

    /**
     * 操作文件或者文件夹（创建，删除）
     * createNewFile()
     * 创建新文件，创建不成功，如果创建不成功抛出IO流异常
     */
    @Test
    public void testCreateNewFile() throws IOException {
        File file = new File("src" + File.separator + "main" + File.separator + "java" + File.separator + "com" + File.separator + "tedu" + File.separator + "api" + File.separator + "io" + File.separator + "text.txt");
//创建text.txt----判断当前文件夹下是否存在，不存在--创建
//                                          存在--不创建
        if (!file.exists()) { // text.txt文件不存在
            //创建文件
            System.out.println("文件是不存在");
            file.createNewFile();
            System.out.println("文件创建完毕~");
        } else {
            System.out.println("文件存在,别创建~");
        }
    }

    /**
     * 拓展：存放文件位置： Maven项目：main 程序入口
     * test程序测试
     * 查找：main下或者test下，必须从src位置开始找
     * ------------------
     * 代表当前项目下
     */
    @Test
    public void testPath() throws IOException {
        //FileAPI.java相当于项目名 "API"下
        File file = new File("." + File.separator + "1");
        //查看file 路径
        // System.out.println(file.getCanonicalPath());
        System.out.println("API项目路径下文件是否存在:" + file.exists());
    }

    /**
     * 文件删除操作
     * delete()
     * 删除已经创建完毕文件
     */
    @Test
    public void testDelete() {
        //创建File--找到text.txt文件
        File file = new File("." + File.separator + "text.txt");
        //删除  如果有文件 删除
        if (file.exists()) {
            System.out.println("有文件");
            file.delete();
            System.out.println("文件删除成功");
        } else {
            System.out.println("文件没有，别删了");
        }

    }


    /**
     * mkdir()
     * 在当前项目下创建一个【目录：文件夹】
     * mkdirs()
     * 创建多层【目录：文件夹】
     * ---提升：删除demo下所有文件夹
     */

    @Test
    public void testMkdir() {
        //创建文件夹---创建在API文件夹下demo文件夹
        File file=new File("."+File.separator+"demo" +
                ""+File.separator+"abc"+File.separator+"bcd");
        //创建文件夹---如果没有文件夹   创建| 有   不创建
        if (!file.exists()) {
            System.out.println("没有文件夹");
           // file.mkdir();
            file.mkdirs();
            System.out.println("创建成功");

        } else {
            System.out.println("已经存在，别创建了");

        }
    }

    /**
     * isDirectory()  判断是否是【目录：文件夹】，返回true
     * isFile()         判断是否是文件，返回true
     * ListFiles()      返回值：数组---File[]
     * 获取当前目录下所有的子项【包含：文件、文件夹】
     */
    @Test
    public void testListFiles() {
        //需求：获取当前“API” 文件夹下 所有的文件、文件夹
        File file = new File(".");

        //只获取 文件夹

        if (file.isDirectory()) {

            //获取文件夹子项

            File[] files = file.listFiles();

            //打印获取到的文件夹名字
            for (int i = 0; i < files.length; i++) {
                System.out.println(files[i]);

            }
        }


    }


}